package P139_UseOpenSourceUtilsBoldly;

/**
 * Desc:&emsp;&ensp;大胆使用开源工具
 *
 * @author 李渊&emsp;liyuan7@yusys.com.cn
 * @version 1.0
 * @since V4.3&emsp;2022/5/20
 */
public class UseOpenSourceUtilsBoldly {


    /**
     * 在Java 世界中从来就不缺乏重复发明轮子的例子， MVC 框架有， 也有
     * Spnng MVC 、WebWorker ； IoC 容器有Spnng ， 也有Google Guice ； ORM 既有Hibernate,
     * 也有MyBatis ； 日志记录有经典的10g4j ， 也有崭新的logback 。可是选择多了， 也会导致我
     * 们无从选择。因此， 在选择开源工具和框架时要遵循一定的原则：
     *
     * 1.普适性原则
     *      选择一个工具或框架就必须考虑项目成员的整体技术水平， 不能有太大的跨度或跳跃
     * 性， 要确保大部分项目成员对工具都比较熟悉， 若一个项目中的成员大部分是新员工， 那么
     * 在持久层框架的选择上， 使用MyB 就比要合适， 因为MyBatis 相对简单、方
     * 便； 再比如在一个熟悉SSH 开发的团队中， 就不应该无故选择Guice 作为loc 容器， 除非是
     * 行政命令或为了尝鲜。
     *
     * 2.唯一性原则
     *      相同的工具只选择一个或一种， 不要让多种相同或相似职能的工具共存。例如集合工具
     * 可以使用Apache Commons的collections 包， 当然也可以使用Google Guava 的Collections
     * 工具包， 但是在项目开发前就应该确认下来， 不能让两者共存。
     *
     * 3.“大树纳凉” 原则
     *      在没有空调、电风扇的年代， 最好的纳凉方式就是找一棵大树， 躲在树荫下享受着
     * 习习凉风， 惬意自在。我们在选择工具包时也应如此， 得寻找比较有名的开源组织， 比如
     * Apache 、Spring 、opensymphony （ 虽然已经关闭， 但它曾经是那么耀眼、辉煌） 、Google 等，
     * 这些开源组织一则具有固定的开发和运作风格， 二则具有广阔的使用人群（ 很多情况下， 我
     * 们不会是第一个发现Bug 的人） ， 在这样的大树下， 我们才有时间和精力纳凉， 而不会把大
     * 好的时间消耗在排查Bug 上。
     *
     * 4. 精而专原则
     *      在武术上， 对一个顶级高手的描述是“ 精通十八般武器” ， 但对工具包来说这就不适
     * 合了， 我们选择的工具包应该是精而专的， 而不是广而多的， 比如虽然Spring 框架提供了
     * Util s 工具包， 但在一般情况下不要使用它， 因为它不专， UtiIs 工具包只是Spring 框架中的
     * 一个附加功能而已， 要用就用Apache Commons 的BeanUtils 、Lang 等工具包。
     *
     * 5.高热度原则
     *      一个开源项目的热度越高， 更新得就越频繁， 使用的人群就越广， Bug 的曝光率就越快，
     * 修复效率也就越高， 这对我们项目的稳定性来说是非常重要的。有很多开源项目可能已经很
     * 长时间没有更新了， 或者是已经非常成熟了， 或者是瀕于关闭了， 这我们不能要求太高， 毕
     * 竟开源项目已经共享出了他人的精力和智力， 我们在享受他人提供的成果的同时， 也应该珍
     * 惜他人的劳动， 最低的标准是不要诋毁开源项目。
     *
     *      对于开源工具， 我们应该大胆采用， 仔细旆选， 如果确实所有的开源工具都无法满足我
     * 们的需求， 那就自己开发一个开源项目， 为千千万万的Java 人服务， 也为Java 的生态系统
     * 贡献自己的力量。
     */
}
